package com.itheima.d6_synchronized_lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/*
    账户类

    Lock锁
    Lock锁是JDK5开始提供的一个新的锁定操作，通过它可以创建出锁对象进行加锁和解锁，更灵活、更方便、更强大。
    Lock是接口，不能直接实例化，可以采用它的实现类ReentrantLock来构建Lock锁对象。

    构造器
        public ReentrantLock()	获得Lock锁的实现类对象
    Lock的常用方法
        void lock()	获得锁
        void unlock()	释放锁
 */
public class Account {
    private String cardId; // 卡号
    private double money; // 余额。

    //创建锁对象
    private Lock lock=new ReentrantLock();

    public Account() {
    }

    public Account(String cardId, double money) {
        this.cardId = cardId;
        this.money = money;
    }

    // 小明 小红同时过来的
    public void drawMoney(double money) throws InterruptedException {
        String name = Thread.currentThread().getName();
        Thread.sleep(100);
        //获取锁
        lock.lock();
        if (this.money >= money) {
            this.money -= money;
            System.out.println(name + "来取钱" + money + "成功!");
            System.out.println(name + "取钱后,账户剩余" + this.money);
        } else {
            System.out.println(name + "来取钱,余额不足!");
        }
        lock.unlock();//释放锁

    }

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }


}
